<?php


class AdminController
{
    public function __construct()
    {

    }

    public function salvar($objeto)
    {
        // inicia transação com o banco
        // o metodo open checa se já existe uma conexão aberta
        // e somente se não houver, ele abre uma.
        TTransaction::open('mysql');
        TTransaction::setLogger(new TLoggerTXT('log.txt'));
        // armazena o objeto
        // o metodo store se encarrega de fazer o insert na tabela
        // disciplina
        $objeto->store();
        //o close é necessario por conta do commit da transação
        TTransaction::close();
    }
    public function listar($Classe)
    {
        // inicia transação com o banco
        TTransaction::open('mysql');

        // instancia um repositório para Disciplina
        // a classe repository é somente uma classe que trabalha com um
        // conjunto de tuplas, nesse caso, um conjunto de objetos disciplina
        $repository = new TRepository($Classe);

        // cria um critério de seleção, ordenado pelo id
        $criteria = new TCriteria;
        $criteria->setProperty('order', 'id');

        // carrega os objetos de acordo com o criterio
        // o metodo load se encarrega de fazer o SELECT no db
        // e retornara um conjunto de tuplas que satisfazem o criterio passado
        $objetos = $repository->load($criteria);
        TTransaction::close();

        return $objetos;

    }
    public function listarTurmasDeDisciplina($key)
    {
        // inicia transação com o banco
        TTransaction::open('mysql');

        // instancia um repositório para Disciplina
        // a classe repository é somente uma classe que trabalha com um
        // conjunto de tuplas, nesse caso, um conjunto de objetos disciplina
        $repository = new TRepository(Turma);

        // cria um critério de seleção, ordenado pelo id
        $criteria = new TCriteria;
        $criteria->add(new TFilter('FK_ID_disciplina', '=', "$key"));
        $criteria->setProperty('order', 'id');

        // carrega os objetos de acordo com o criterio
        // o metodo load se encarrega de fazer o SELECT no db
        // e retornara um conjunto de tuplas que satisfazem o criterio passado
        $objetos = $repository->load($criteria);
        TTransaction::close();

        echo count($objetos);

        return $objetos;

    }
    public function listarAlunosDaTurma($idDisciplina, $idTurma)
    {
        // inicia transação com o banco
        TTransaction::open('mysql');

        // instancia um repositório para Disciplina
        // a classe repository é somente uma classe que trabalha com um
        // conjunto de tuplas, nesse caso, um conjunto de objetos disciplina
        $repository = new TRepository(DiarioDeClasse);

        // cria um critério de seleção, ordenado pelo id
        $criteria = new TCriteria;
        $criteria->add(new TFilter('FK_ID_disciplina', '=', "$idDisciplina"));
        $criteria->add(new TFilter('FK_ID_turma', '=', "$idTurma"));
        $criteria->setProperty('order', 'FK_ID_aluno');

        // carrega os objetos de acordo com o criterio
        // o metodo load se encarrega de fazer o SELECT no db
        // e retornara um conjunto de tuplas que satisfazem o criterio passado
        $objetos = $repository->load($criteria);
        TTransaction::close();

        return $objetos;

    }
    public function buscar()
    {
        // inicia transação com o banco
        TTransaction::open('mysql');
        TTransaction::setLogger(new TLoggerTXT('log.txt'));

        // cria um critério de seleção de dados
        $criteria = new TCriteria;
        // ordena pelo campo id
        // filtra baseado na chave e na entidade
        if(func_num_args() == 2)
        {
            $key=func_get_arg(0);
            $Classe=func_get_arg(1);
            $criteria->add(new TFilter('id', '=', "$key"));
            $criteria->setProperty('order', 'id');
        }
        else if(func_num_args() == 3) //no caso de turma
        {
            $key1=func_get_arg(0);
            $key2=func_get_arg(1);
            $Classe=func_get_arg(2);
            $criteria->add(new TFilter('id', '=', "$key1"));
            $criteria->add(new TFilter('FK_ID_disciplina', '=', "$key2"));
            $criteria->setProperty('order', 'FK_ID_disciplina');
        }
        // instancia um repositório para Cliente
        $repository = new TRepository($Classe);
        // carrega os produtos que satisfazem o critério
        $objetos = $repository->load($criteria);
        TTransaction::close();
        return $objetos[0];
    }
    
    public function excluir($key,$Classe)
    {
        // inicia transação com o banco 'pg_livro'
        TTransaction::open('mysql');
        TTransaction::setLogger(new TLoggerTXT('log.txt'));
        // instancia objeto Cidade
        $objeto = new $Classe($key);
        // deleta objeto do banco de dados
        $objeto->delete();
        // finaliza a transação
        TTransaction::close();

    }

    public function excluirTurma($id,$idDisciplina){
        // inicia transação com o banco 'pg_livro'
        TTransaction::open('mysql');
        TTransaction::setLogger(new TLoggerTXT('log.txt'));
        // instancia objeto Cidade
        $objeto = new Turma();
        $objeto = $objeto->load($id,$idDisciplina);
        // deleta objeto do banco de dados
        $objeto->delete();
        // finaliza a transação
        TTransaction::close();
    }

}
?>
